<?php
/**
 * Created by PhpStorm.
 * User: mUsr
 * Date: 18/6/27
 * Time: 下午5:01
 */


/**
 * 获取当前系统时间
 * @return float
 */
function getCurrentTime()
{
    list ($msec, $sec) = explode(" ", microtime());
    return (float)$msec + (float)$sec;
}


/**
 * 在某个键之前/之后将数组插入另一个数组
 *
 * @param array $array 初始数组
 * @param array $pairs 要插入的数组
 * @param string $key 某个键
 * @param string $position 要在键之前或之后插入数组
 * @return array
 */
function array_insert($array, $pairs, $key, $position = 'after')
{
    $key_pos = array_search($key, array_keys($array));
    if ('after' == $position) {
        $key_pos++;
    }

    if (false !== $key_pos) {
        $result = array_slice($array, 0, $key_pos);
        $result = array_merge($result, $pairs);
        $result = array_merge($result, array_slice($array, $key_pos));
    } else {
        $result = array_merge($array, $pairs);
    }
    return $result;
}


/**
 * 消息到websocket客户端
 * @param $fd 客户端ws连接id
 * @param $type 消息类型
 * @param array $data 消息内容
 * @param int $code 状态码
 */
function msgToClient($fd, $type, $data = [], $code = 200)
{
    global $server;
    $data['code'] = $code;
    $response = json_encode([
        'type' => $type,
        'data' => $data
    ]);

    if (!is_numeric($fd)) {
        return;
    }
    // 连接状态
    if (!$server->exist($fd)) {
        return;
    }
    $server->push($fd, $response);
}


/**
 * 广播状态消息
 * @param $msg 消息内容
 */
function stat_broadcast($msg)
{
    global $storage;
    $stat_fd = $storage->get('stat/fd');
    if ($stat_fd) {
        foreach ($stat_fd as $fd) {
            msgToClient($fd, 'qing', ['msg' => $msg]);
        }
    }
}


/**
 * 写入文件
 * @param $file 文件
 * @param $string 写入数据
 * @param bool $append 是否追加，默认追加，如需覆盖，传入false
 * @return bool
 */
function inputFile($file, $string, $append = true){
    $path = dirname($file);

    // 判断创建目录
    if (!is_dir($path)){
        if (!mkdir($path, 0777, true)){
            return false;
        }
    }

    file_put_contents($file, $string, $append ? FILE_APPEND : NULL);
}
